from DrissionPage import ChromiumPage
from DataRecorder import Recorder
import pandas as pd
from tqdm import tqdm
import time
import random
import re
import openpyxl
import os
import math
def countdown(n):
    for i in range(n, 0, -1):
        print(f'\r倒计时{i}秒', end='')  # \r让光标回到行首 ，end=''--结束符为空，即不换行
        time.sleep(1)  # 让程序等待1秒
    else:
        print('\r倒计时结束')

def sign_in():
    sign_in_page = ChromiumPage()
    sign_in_page.get('https://www.xiaohongshu.com')
    # 第一次运行需要扫码登录
    print("请扫码登录")
    # 倒计时30s
    countdown(30)

def open(url):
    global page, user_name
    page = ChromiumPage()
    page.get(f'{url}')
    # 页面最大化
    page.set.window.max()

    # 定位作者信息
    user = page.ele('.info')
    # 作者名字
    user_name = user.ele('.user-name', timeout=0).text

def crawler(times):
    global i
    for i in tqdm(range(1, times + 1)):
        get_info()
        page_scroll_down()



if __name__ == '__main__':
    # 1、第1次运行需要登录，需要执行sign_in()步骤。第2次之后不用登录，可以注释掉sign_in()步骤。
    sign_in()

    # 2、设置主页地址url
    author_url = "https://www.xiaohongshu.com/user/profile/60bc91d4000000000100497f"

    # 3、设置向下翻页爬取次数
    # 根据小红书作者主页“当前发布笔记数”计算浏览器下滑次数。
    # “当前发布笔记数” 获取方法参考https://www.sohu.com/a/473958839_99956253
    # note_num是笔记数量
    note_num = 62
    # times是计算得到的翻页次数，笔记数量除以20，调整系数，再向上取整
    times = math.ceil(note_num / 20 * 1.1)
    print(f"需要执行翻页次数为：{times}")

    # 4、设置要保存的文件名file_path
    # 获取当前时间
    current_time = time.localtime()
    # 格式化当前时间
    formatted_time = time.strftime("%Y-%m-%d %H%M%S", current_time)
    # 初始化文件
    init_file_path = f'小红书作者主页所有笔记-{formatted_time}.xlsx'
    r = Recorder(path=init_file_path, cache_size=100)

    # 下面不用改，程序自动执行
    # 打开主页
    open(author_url)

    # 根据设置的次数，开始爬取数据
    crawler(times)

    # 避免数据丢失，爬虫结束时强制保存excel文件
    r.record()

    # 数据去重、排序，另存为新文件
    re_save_excel(init_file_path)